/* AUTOR: RAFAEL ABERTO MORENO PARRA
   Evaluador de expresiones en Java.	01 de Julio de 2010
   http://darwin.50webs.com

   Licencia: LGPL  GNU Lesser General Public License (http://es.wikipedia.org/wiki/GNU_Lesser_General_Public_License)
*/

/* Lista simplemente enlazada para evaluar una expresión muy simple (sin paréntesis).

Su funcionamiento es así:
Esta expresión 4+5-2*3/4*6+7+3-8/2*5-4 se convierte a esto
4+
5-
ACUM+ (2* 3/ 4* 6N)
7+
3-
ACUM- (8/ 2* 5N)
4N

De esa manera resolver la expresión simple es solo ir de arriba a abajo con desviaciones
a la derecha cuando encuentra multiplicaciones y divisiones */

package evaluador;

public class NodoSimple
{
    int iFuncion; //Si es una función
    char cVariable;  //Que variable es de la expresion simple
    double fNumero;  //Numero en la expresion simple
    char cOperador; //Operador en la expresión simple

    //Expresión simple todo es suma y resta
    NodoSimple Abajo;

    //Desviación derecha multiplica/divide
    NodoSimple Derecha;

    //Desviación potencia
    NodoSimple Potencia;

    //Lista de expresión analizada (los ACUMs)
    NodoSimple Arriba;

    //Expresión simple apunta a un operador que es un ACUMULADOR
    NodoSimple objACUM;

    //Constructor 1 (suma y resta)
    NodoSimple(double fNumero, char cOperador)
    {
	this.cVariable = 0;
	this.fNumero = fNumero;
	this.cOperador = cOperador;
	this.Abajo = null;
	this.Derecha = null;
	this.Potencia = null;
	this.objACUM = null;
	this.iFuncion = 0;
    }

    //Constructor 2
    NodoSimple(char cVariable, char cOperador)
    {
	this.cVariable = cVariable;
	this.fNumero = 0;
	this.cOperador = cOperador;
	this.Abajo = null;
	this.Derecha = null;
	this.Potencia = null;
	this.objACUM = null;
	this.iFuncion = 0;
    }

    //Constructor 3 (Nodo ACUM) de lista analizada
    NodoSimple()
    {
	this.cVariable = 0;
	this.fNumero = 0;
	this.cOperador = 0;
	this.Abajo = null;
	this.Derecha = null;
	this.Potencia = null;
	this.objACUM = null;
	this.iFuncion = 0;
    }

    //Constructor 4 (Nodo ACUM) de lista analizada
    NodoSimple(NodoSimple objACUM)
    {
        this.cVariable = 0;
	this.fNumero = 0;
	this.cOperador = 0;
	this.Abajo = null;
	this.Derecha = null;
	this.Potencia = null;
	this.objACUM = null;
	this.Arriba = objACUM;
	objACUM.Abajo = this;
	this.iFuncion = 0;
    }

    //Constructor 5: Nodo de desviación
    NodoSimple(NodoSimple objACUM, char cOperador)
    {
        this.cVariable = 0;
	this.fNumero = 0;
	this.cOperador = cOperador;
	this.Abajo = null;
	this.Derecha = null;
	this.Potencia = null;
	this.objACUM = objACUM;
	this.iFuncion = 0;
    }

}
